package com.base.utils.date;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import com.base.utils.StringUtil;
import com.base.utils.VerifyUtil;

/**
 * 日期格式化工具类
 * @author Jason
 */
public class FormatDateUtil {
	
	/**
	 * <p>不带小时，分钟，秒格式化日期</p>
	 * <p>格式:<b>yyyy-MM-dd</b></p>
	 * @param date
	 * @return
	 */
	public static String formatNoHMS(Date date) {
		if(!VerifyUtil.isNotNull(date)) return null;
		DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		return format.format(date);
	}
	
	/**
	 * <p>带小时，分钟，秒格式化日期</p>
	 * <p>格式:<b>yyyy-MM-dd HH:mm:ss</b></p>
	 * @param date
	 * @return
	 */
	public static String format(Date date) {
		if(!VerifyUtil.isNotNull(date)) return null;
		DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return format.format(date);
	}
	
	/**
	 * <p>自定义格式格式化日期</p>
	 * @param date
	 * @param formatStr
	 * @return
	 */
	public static String format(Date date, String formatStr) {
		if(!VerifyUtil.isNotNull(date)) return null;
		if(!StringUtil.isNotEmpty(formatStr)) return null;
		DateFormat format = new SimpleDateFormat(formatStr);
		return format.format(date);
	}
	
	/**
	 * <p>不带小时，分钟，秒解析</p>
	 * <p>解析格式:<b>yyyy-MM-dd</b></p>
	 * @param dateStr 日期字符串
	 * @return
	 */
	public static Date parseNoHMS(String dateStr) {
		if(!StringUtil.isNotEmpty(dateStr)) return null;
		Date date = parse(dateStr, "yyyy-MM-dd");
		return date;
	}
	
	/**
	 * <p>带小时，分钟，秒解析</p>
	 * <p>解析格式:<b>yyyy-MM-dd HH:mm:ss</b></p>
	 * @param dateStr 日期字符串
	 * @return
	 */
	public static Date parse(String dateStr) {
		if(!StringUtil.isNotEmpty(dateStr)) return null;
		Date date = parse(dateStr, "yyyy-MM-dd HH:mm:ss");
		return date;
	}
	
	/**
	 * <p>根据自定义格式解析</p>
	 * @param dateStr 日期字符串
	 * @param formatStr 字符串格式
	 * @return
	 */
	public static Date parse(String dateStr, String formatStr) {
		if(!StringUtil.isNotEmpty(dateStr)) return null;
		if(!StringUtil.isNotEmpty(formatStr)) return null;
		DateFormat format = new SimpleDateFormat(formatStr);
		try {
			Date date = format.parse(dateStr);
			return date;
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * <p>解析不带小时，分钟，秒Date类型</p>
	 * @param date
	 * @return
	 */
	public static Date parseNoHMSByDate(Date date) {
		if(!VerifyUtil.isNotNull(date)) return null;
		String dateStr = formatNoHMS(date);
		return parseNoHMS(dateStr);
	}

	/**
	 * <p>解析带小时，分钟，秒Date类型</p>
	 * @param date
	 * @return
	 */	
	public static Date parseByDate(Date date) {
		if(!VerifyUtil.isNotNull(date)) return null;
		String dateStr = format(date);
		return parse(dateStr);
	}
	
	/**
	 * <p>自定义格式解析Date类型</p>
	 * @param date
	 * @return
	 */	
	public static Date parseNoHMSByDate(Date date, String formatStr) {
		if(!VerifyUtil.isNotNull(date)) return null;
		if(!StringUtil.isNotEmpty(formatStr)) return null;
		String dateStr = format(date, formatStr);
		return parse(dateStr, formatStr);
	}
}
